import java.util.Arrays;
import java.util.Scanner;

public class FriedHoneysuckle {
    public static void main(String[] args) {
        int user_money = 400;       //玩家赌本
        int chip ;                  //筹码
        int computer_money = 400;   //电脑赌本
        int[] user_result = new int[3];           //玩家手牌
        int[] computer_result = new int[3];        //电脑手牌
        int[] user1 = new int[3];               //定义user1存储玩家手牌的花色
        int[] user2 = new int[3];               //定义user2存储玩家手牌的数字
        int[] computer1 = new int[3];           //定义computer1存储玩家手牌的花色
        int[] computer2 = new int[3];           //定义computer2存储玩家手牌的数字
        int count = 0 ;                         //用count记录游戏局数


        Scanner scanner = new Scanner(System.in);

        boolean flag;                  //用于发牌阶段
//        boolean flag2 = true ;                  //用于判断是否继续游戏
//        int m = 1;                            //用于判断玩家是否继续游戏
//        m == 1
        System.out.println("请输入你压的筹码：");
        chip = scanner.nextInt();
        while ( user_money > 0 && computer_money > 0 ) {  //游戏继续条件

            do {         //使用循环使得两人得到不同的牌
                flag = false ;                                  //每次循环开始先设定flag 以确保 出现正确手牌时 能跳出循环
                for (int i = 0; i < 3; i++) {                   //先分别给电脑和玩家发牌
                    user_result[i] = licensing();
                    computer_result[i] = licensing();
                }
                //如果玩家或者电脑手牌中出现两张相同的牌则直接跳过后续语句进行重新发牌
                if (user_result[0] == user_result[1] || user_result[1] == user_result[2] || user_result[0] == user_result[2]) {
                    flag = true ;
                    continue;
                }else if(computer_result[0] == computer_result[1] || computer_result[1] == computer_result[2] || computer_result[0] == computer_result[2]){
                    flag = true ;
                    continue;
                }
                //如果电脑和玩家的手牌中出现了相同的手牌则跳过后续语句进行重新发牌
                for (int i = 0; i < 3; i++) {
                    for (int j = 0; j < 3; j++) {
                        if ( user_result[i] == computer_result[j]){
                            flag = true ;
                        }
                    }
                }

            } while (flag);  //如果电脑和玩家牌中未出现重复的牌则跳出循环

            for (int i = 0; i < 3; i++) {           //用user1存储玩家手牌花色，用computer1存储电脑手牌花色
                user1[i] = user_result[i] / 100;
                computer1[i] = computer_result[i] / 100 ;
            }
            for (int i = 0; i < 3; i++) {           //用user2存储玩家手牌数字，用computer2存储电脑手牌数字
                user2[i] = user_result[i] % 100;
                computer2[i] = computer_result[i] % 100;
            }

            int user_level = level( user1 ,user2) ;        //玩家手牌级别
            int computer_level = level( computer1 ,computer2) ;    //电脑手牌级别

//            System.out.println("玩家手牌：" + Arrays.toString(user_result) + " "+ user_level ) ;
//            System.out.println("电脑手牌：" + Arrays.toString(computer_result) + " "+ computer_level) ;
//            System.out.println("请输入你压的筹码：");                                           // 规范玩家所压筹码
//            chip = scanner.nextInt();
//            while ( chip > user_money ||  chip > computer_money || chip < 0){
//                if ( chip > user_money ){
//                    System.out.println("你的筹码不够啊，请重新压筹码！");
//                    chip = scanner.nextInt();
//                }else if(chip > computer_money){
//                    System.out.println("电脑筹码不够啊，请重新压筹码！");
//                    chip = scanner.nextInt();
//                }else{
//                    System.out.println("筹码不能为负数！请重新压筹码！");
//                    chip = scanner.nextInt();
//                }
//
//            }

            if ( user_level > computer_level){              // 通过级别比较手牌大小
                computer_money -= chip ;
                user_money += chip ;
            }else if ( user_level < computer_level){
                user_money -= chip ;
                computer_money += chip ;
            }else {

                int []max_user = max(user2) ;       //存放玩家最大牌的花色和值
                int []max_computer = max(computer2) ; //存放电脑最大牌的花色和值
                if( max_user[1] > max_computer[1] ){        //如果级别相同则判断最大牌值
                    computer_money -= chip ;
                    user_money += chip ;
                }else if ( max_user[1] < max_computer[1] ){
                    user_money -= chip ;
                    computer_money += chip ;
                }else {

                    if ( user1[max_user[0]] > computer1[max_computer[0]] ){   //如果级别相同且最大牌也相同则判断花色
                        computer_money -= chip ;
                        user_money += chip ;
                    }else {
                        user_money -= chip ;
                        computer_money += chip ;
                    }

                }
            }
            count++;        //每进行一局游戏count就加一
            System.out.println("第" + count + "局游戏：");
            System.out.println();
            System.out.print("玩家手牌：");
            result_info(user_result , user_level);   //将存放手牌的数组使用result_info函数转换成相应手牌
            System.out.println(" " + "\t\t" + "玩家筹码：" + user_money);
            System.out.print("电脑手牌：");              //将存放手牌的数组使用result_info函数转换成相应手牌
            result_info(computer_result , computer_level);
            System.out.println(" " + "\t\t" + "电脑筹码：" + computer_money);
            System.out.println();
            System.out.println("---------------------------------");
            System.out.println();
//            System.out.println("玩家手牌：" + Arrays.toString(user_result) + " "+ user_level + " " + "\t\t" + "玩家筹码：" + user_money);
//            System.out.println("电脑手牌：" + Arrays.toString(computer_result) + " "+ computer_level + " " + "\t\t" + "电脑筹码：" + computer_money);
//            if ( user_money != 0 && computer_money != 0){
//                System.out.println("是否继续游戏：1(继续)/0(结束)");
//                m = scanner.nextInt() ;
//                while ( m!= 0 && m!=1 ) {                  //规范玩家输入的操作
//                    System.out.println("输入有误！请重新输入");
//                    m = scanner.nextInt() ;
//                }
//            }else {
//                m = 0 ;
//            }


        }
   //     System.out.println("游戏结束，欢迎下次再来！");

    }

    public static int licensing() {             //  发牌函数
        int result;
        result = (int) ( 4 * Math.random() + 1) * 100 + (int) (13 * Math.random() + 2);
        return result;
    }

    /**
     * 判断手牌级别
     * @param str1  str1存储手牌的花色
     * @param str2   str2存储手牌数值
     * @return      返回手牌级别
     */
    public static int level( int []str1 , int []str2) {
        int[] temp;   //存储手牌数值
        temp = Arrays.copyOf(str2,str2.length) ;
        if (str2[0] == 14 ){              //判断是否存在A，如果存在则将其转换成1，解决A，2,3为顺子的问题
            temp[0] = 1;
        }
        else if( str2[1] == 14 ){
            temp[1] = 1;
        }
        else if( str2[2] == 14){
            temp[2] = 1;
        }
        // 三条
        boolean flag_1 = (temp[0] == temp[1] && temp[1] == temp[2]);
        //同花
        boolean flag_3 = (str1[0] == str1[1] && str1[1] == str1[2]);
        //顺子
        boolean flag_4 = (((temp[0] + temp[1] == 2 * temp[2]) && ((Math.abs(temp[0] - temp[2]) == 1))) || ((temp[1] + temp[2] == 2 * temp[0]) && ((Math.abs(temp[1] - temp[2]) == 1))) || ((temp[0] + temp[2] == 2 * temp[1]) && ((Math.abs(temp[0] - temp[1]) == 1))));
        //同花顺
        boolean flag_2 = (flag_3 && flag_4);
        //对子
        boolean flag_5 = (temp[0] == temp[1] || temp[0] == temp[2] || temp[1] == temp[2]);

        if (flag_1) {
            return 6;
        } else if (flag_2) {
            return 5;
        } else if (flag_3) {
            return 4;
        } else if (flag_4) {
            return 3;
        } else if (flag_5) {
            return 2;
        } else {
            return 1;
        }
    }


    public static int[] max( int[] result){          //获得三张牌中的最大值和它的下标
        int temp = 0 ;
        int index = 0 ;

        for (int i = 0; i < result.length; i++) {
            if( result[i] > temp) {
                temp = result[i];
                index = i ;
            }
        }
        int []intArrays = new int[]{index ,  temp} ;   //用一个整型数组存放下标和最大值
        return  intArrays ;
    }

    public static void result_info(int[] result , int level){

        for (int i = 0; i < 3; i++) {          //输出抓牌结果
            switch (result[i] / 100){
                case 1 :
                    System.out.print("红心");break;
                case 2 :
                    System.out.print("方块");break;
                case 3 :
                    System.out.print("梅花");break;
                case 4 :
                    System.out.print("黑桃");break;
            }
            switch (result[i] % 100){
                case 2 :
                    System.out.print("2");break;
                case 3 :
                    System.out.print("3");break;
                case 4 :
                    System.out.print("4");break;
                case 5 :
                    System.out.print("5");break;
                case 6 :
                    System.out.print("6");break;
                case 7 :
                    System.out.print("7");break;
                case 8 :
                    System.out.print("8");break;
                case 9 :
                    System.out.print("9");break;
                case 10 :
                    System.out.print("10");break;
                case 11 :
                    System.out.print("J");break;
                case 12 :
                    System.out.print("Q");break;
                case 13 :
                    System.out.print("K");break;
                case 14 :
                    System.out.print("A");break;
            }
            if ( i!=2 ) {
                System.out.print(",");
            }
        }
        System.out.println();
        System.out.print("牌型：");
        switch (level){
            case 1:
                System.out.print( "单张" ); break;
            case 2:
                System.out.print("对子");break;
            case 3:
                System.out.print("顺子");break;
            case 4:
                System.out.print("同花");break;
            case 5:
                System.out.print("同花顺");break;
            case 6:
                System.out.print("三条");break;

        }

    }


}
